【iOS】作成した3Dモデルを画面上にリストで表示させる
前回、オンデバイスで3Dモデルを作成する方法について調べました。
詳細はこちらの【iOS 17】オンデバイス完結!オブジェクトキャプチャ→3Dモデル生成の過程を確認してみたをご確認ください。
3Dモデルを作成することはできたので、今度は作成した3Dモデルの一覧を確認したくなり、その表示方法について調べてみることにしました。
環境
- Xcode 15.2
- iOS 17.3.1
- iPhone 15 Pro
3Dモデルを画面上に表示する
今回は画面上にリストを表示して端末に保存されている3Dモデルを一度に複数閲覧できる方法を探してみました。
SceneKit
のSceneView
を使用することでSwiftUIでも手軽に3Dモデルを表示をすることができることが分かり、試してみます。
SceneView
SceneView
の第一引数には、SCNScene
を渡すことができる為、3Dモデルが保存されているパスからSCNScene
を生成しました。
生成したSCNScene
をSceneView
に渡してリスト表示をしてみました。
import SwiftUI import SceneKit struct ModelListView: View { // モデルデータの保存先からパスを抽出してSceneを生成 private var modelScenes: [SCNScene] { return CaptureFolderManager.getAllModelFilesPaths() .compactMap({ URL(string: $0) }) .compactMap({ try? SCNScene(url: $0) }) } var body: some View { ScrollView { VStack { ForEach(modelScenes, id: \.self) { SceneView(scene: $0) .frame(width: 200, height: 200) .clipShape(RoundedRectangle(cornerRadius: 16)) } } } } }
SceneView
にSCNScene
を渡すだけだと真っ黒で表示されてしまいました。
これは生成したScene自体が光源を持っていないことが原因です。
SceneView
生成時、下記のようにoptions
にautoenablesDefaultLighting
を設定すると、自動的に光源を追加してくれる為、モデルが意図した通りに表示されるようになりました。
SceneView(scene: $0, options: .autoenablesDefaultLighting)
モデルの全体像を確認したい場合
SceneView
のoptions
には複数のオプションを設定することが出来ます。
そして、allowsCameraControl
をoptions
に追加することでユーザーがそのScene
内の視点を変更することが可能になります。
SceneView(scene: $0, options: [ .autoenablesDefaultLighting, .allowsCameraControl ])
デモ
SceneView
上に表示されている3Dモデルが指の操作で回転できるようになりました。
活用法
今回の3Dモデルを画面上にリストで表示させる機能の活用法としては、画面上にリストを表示して、選択したモデルの全体像を確認できたり、選択したモデルをAR空間上に配置できるようにしたりする機能に活用できそうです。
おわりに
今回はSceneView
の詳細な設定については省略しましたが、こちらのSwiftUI SceneViewによる3D表現がとても参考になりました。
引き続き、オンデバイスでの3Dモデル作成や作成したモデルの活用法について調査していきたいと思います。